//
// Created by 李传智 on 2018/5/1.
//

#ifndef ANDSDK_IRECORDER_H
#define ANDSDK_IRECORDER_H


#include <list>
#include "IObserver.h"
#include "CodecParameter.h"

class IRecorder : public IObserver {

public:

    // 打开录制
    virtual bool open(const char *url, CodecParameter outAudioParam, CodecParameter outVideoParam) = 0;

    // 清理
    virtual bool clear();

    // 结束录制
    virtual bool close() = 0;

    // 从 demux 获取到的数据, 如果已达到最大缓冲队列数(maxPackets)，会阻塞调用线程
    virtual void update(VideoData data);

    // 最大的队列缓冲数
    int maxPackets = 100;

    // 同步音频时间，再次打开文件要清零
    int64_t syncPts = 0;

protected:

    // 线程入口函数
    virtual void main();

    // 所有的缓冲帧
    std::list<VideoData> pkts;

    // 录制音视频
    virtual bool record(VideoData data) = 0;
};


#endif //ANDSDK_IRECORDER_H
